#include<iostream>
using namespace std;
/*
C++另一种编程思想称为泛型编程，主要利用的技术就是模板
C++提供两种模板机制：函数模板和类模板

函数模板语法
函数模板作用：建立一个通用函数，其函数返回值类型和形参类型可以不具体制定，用一个虚拟的类型来代表

语法：
template<typename T>
函数声明或定义

解释：
template - 声明创建模板
typename - 表明其后面的符号是一种数据类型，可以用class代替
T        - 通用的数据类型，名称可以替换，通常为大写字母
*/
//交换两数 普通做法
void swapInt(int &a,int &b)
{
    int temp=a;
    a=b;
    b=temp;
}
void swapDouble(double &a,double &b)
{
    double temp=a;
    a=b;
    b=temp;
}
//当数据类型不一样时，就需要重新写一个函数，非常麻烦
//因此利用模板提供通用的交换函数
template<typename T>
void mySwap(T &a,T &b)
{
    T temp=a;
    a=b;
    b=temp;
}
void test01()
{
    int a=10;
    int b=20;
    //利用模板实现交换
    //1自动类型推导
    mySwap(a,b);
    cout<<"交换第一次"<<endl;
    cout<<"a="<<a<<endl;
    cout<<"b="<<b<<endl;
    //2显示指定类型
    mySwap<int>(a,b);
    cout<<"交换第二次"<<endl;
    cout<<"a="<<a<<endl;
    cout<<"b="<<b<<endl;
}
int main()
{
    test01();
}
/*
总结：
1、函数模板利用关键字template
2、利用函数模板有两种方式：自动类型推导、显示指定类型
3、模板的目的是为了提高复用性，将类型参数化
*/